package model;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

import com.wutka.jox.JOXBeanInputStream;
import com.wutka.jox.JOXBeanOutputStream;

public class Doc
{
	private Long numero;
	private String nomeEmissor;
	private String bancoEmissor;
	private Long contaCorrenteEmissor;
	private Integer agenciaEmissor;
	private String nomeFavorecido;
	private String cpfFavorecido;
	private String bancoFavorecido;
	private Long contaCorrenteFavorecido;
	private Integer agenciaFavorecido;
	private Double valor;
	private Date data;
	
	public Doc()
	{
		
	}

	public Long getNumero()
	{
		return this.numero;
	}

	public void setNumero(Long numero)
	{
		this.numero = numero;
	}

	public String getNomeEmissor()
	{
		return this.nomeEmissor;
	}

	public void setNomeEmissor(String nomeEmissor)
	{
		this.nomeEmissor = nomeEmissor;
	}

	public String getBancoEmissor()
	{
		return this.bancoEmissor;
	}

	public void setBancoEmissor(String bancoEmissor)
	{
		this.bancoEmissor = bancoEmissor;
	}

	public Long getContaCorrenteEmissor()
	{
		return this.contaCorrenteEmissor;
	}

	public void setContaCorrenteEmissor(Long contaCorrenteEmissor)
	{
		this.contaCorrenteEmissor = contaCorrenteEmissor;
	}

	public Integer getAgenciaEmissor()
	{
		return this.agenciaEmissor;
	}

	public void setAgenciaEmissor(Integer agenciaEmissor)
	{
		this.agenciaEmissor = agenciaEmissor;
	}

	public String getNomeFavorecido()
	{
		return this.nomeFavorecido;
	}

	public void setNomeFavorecido(String nomeFavorecido)
	{
		this.nomeFavorecido = nomeFavorecido;
	}

	public String getBancoFavorecido()
	{
		return this.bancoFavorecido;
	}

	public void setBancoFavorecido(String bancoFavorecido)
	{
		this.bancoFavorecido = bancoFavorecido;
	}

	public Long getContaCorrenteFavorecido()
	{
		return this.contaCorrenteFavorecido;
	}

	public void setContaCorrenteFavorecido(Long contaCorrenteFavorecido)
	{
		this.contaCorrenteFavorecido = contaCorrenteFavorecido;
	}

	public Integer getAgenciaFavorecido()
	{
		return this.agenciaFavorecido;
	}

	public void setAgenciaFavorecido(Integer agenciaFavorecido)
	{
		this.agenciaFavorecido = agenciaFavorecido;
	}

	public Double getValor()
	{
		return this.valor;
	}

	public void setValor(Double valor)
	{
		this.valor = valor;
	}

	public String getCpfFavorecido()
	{
		return this.cpfFavorecido;
	}

	public void setCpfFavorecido(String cpfFavorecido)
	{
		this.cpfFavorecido = cpfFavorecido;
	}

	public Date getData()
	{
		return this.data;
	}

	public void setData(Date data)
	{
		this.data = data;
	}
	
	public void generateXMLFile()
	{
		try
		{
			DateFormat df = new SimpleDateFormat("ddMMyyyy");			
			
			FileOutputStream xmlFile = new FileOutputStream("doc_"+ this.getNumero() + "_" + this.getBancoEmissor() + "_" + df.format(new Date()) + ".xml");
			JOXBeanOutputStream jox = new JOXBeanOutputStream(xmlFile);
			jox.writeObject("doc", this);
			
		} catch (IOException e)
		{
			e.printStackTrace();
		}

	}

	public String descontar()
	{
		String resposta = "ERROR";
		File contaCorrente = new File("cc_" + this.getAgenciaEmissor() + "_" + this.getContaCorrenteEmissor() + ".xml");
		
		try
		{
			
			if (contaCorrente.exists())
			{
				
				JOXBeanInputStream joxIn = new JOXBeanInputStream(new FileInputStream(contaCorrente));

				ContaCorrente cc = (ContaCorrente) joxIn.readObject(ContaCorrente.class);
				
				cc.setSaldo(cc.getSaldo() + this.getValor());
				cc.generateXMLFile();					
				resposta = "OK";					
						
			}
			
			
		} catch (Exception e)
		{
			//e.printStackTrace();
			System.out.println("Erro ao processar desconto do Doc '" + this.getNumero() + "'!");
		}
		
		return resposta;
	}
}
